package common

var (
	OK = NewErrno(0, "OK")

	// 系统错误,前缀为 100
	ErrServerError = NewErrno(10001, "内部服务器错误")

	// 数据库错误,前缀为 200
	ErrDatabase       = NewErrno(20001, "数据库错误")
	ErrDatabaseinsert = NewErrno(20002, "数据库插入错误")
	ErrDatabasequery  = NewErrno(20003, "数据库查询错误")
	ErrDatabasedelete = NewErrno(20004, "数据库删除错误")

	// 认证错误,前缀是 300
	ErrValidation = NewErrno(30001, "验证失败")
	ErrAuth       = NewErrno(30002, "鉴权失败")

	// 参数错误,前缀为 400
	ErrParamsValidation = NewErrno(40001, "参数错误")
	ErrParamsUpload     = NewErrno(40002, "文件上传失败")
	ErrParamsDownload   = NewErrno(40003, "文件下载失败")

	// 资源不存在,前缀为 500
	ErrResources = NewErrno(50001, "资源错误")

	// GetDownload服务,前缀 600
	ErrGetDownload = NewErrno(60001, "下载失败")
	// GetList服务,前缀 610
	ErrGetList = NewErrno(61001, "查询失败")
	// PostCreateUser服务,前缀 620
	ErrPostCreateUser = NewErrno(62001, "创建用户失败")
	// PostRollback服务,前缀 630
	ErrPostRollback = NewErrno(63001, "回滚失败")
	// PostUpload服务,前缀 640
	ErrPostUpload = NewErrno(64001, "上传失败")
	// PostLogin服务,前缀 650
	ErrPostLogin = NewErrno(65001, "登录失败")
	// PostLogin服务,前缀 660
	ErrPostLogout = NewErrno(66001, "退出失败")
	// GetLatest服务,前缀 670
	ErrGetLatest = NewErrno(67001, "查询失败")
)

type Errno interface {
	ErrCode() int
	ErrMsg() string
}

// 定义错误码
type errno struct {
	error
	Code    int
	Message string
}

func NewErrno(code int, err string) errno {
	return errno{Code: code, Message: err}
}

func (err errno) ErrCode() int {
	return err.Code
}

func (err errno) ErrMsg() string {
	if len(err.Message) <= 0 {
		return err.Error()
	}
	return err.Message
}
